package net.zjitc.tree;

public class MyBTree<E>  {

    private TreeNode<E> root;

    public MyBTree(TreeNode<E> root) {
        this.root = root;
    }


    public TreeNode<E> getRoot() {
        return root;
    }

    public void setRoot(TreeNode<E> root) {
        this.root = root;
    }

    /**
     * @param node
     * @param data
     */
    public void insertL(TreeNode<E> node,E data){
        if (node.left != null){
            throw new RuntimeException("左子树已经存在");
        }
        node.left = new TreeNode<E>(data);
    }

    /**
     * 添加右孩子
     * @param node
     * @param data
     */
    public void insertR(TreeNode<E> node,E data){
        if (node.right != null){
            throw new RuntimeException("右子树已经存在");
        }
        node.right = new TreeNode<E>(data);
    }

    /**
     * 获得左孩子
     * @param node
     * @return
     */
    public TreeNode<E> getLChild(TreeNode<E> node){
        return node.left;
    }


    /**
     * 获得右孩子
     * @param node
     * @return
     */
    public TreeNode<E> getRChild(TreeNode<E> node){
        return node.right;
    }


    /**
     * 前序: 根  左  右
     */

    public void preOrder(TreeNode<E> node){

        if (node != null){
            //根
            System.out.println(node.data);
            //左
            preOrder(node.left);
            //右
            preOrder(node.right);
        }
    }

    public void inOrder(TreeNode<E> node){
        if (node != null){
            //左
            inOrder(node.left);
            //根
            System.out.println(node.data);
            //右
            inOrder(node.right);
        }
    }


    public void postOrder(TreeNode<E> node){
        if (node != null){
            //左
            postOrder(node.left);
            //右
            postOrder(node.right);
            //根
            System.out.println(node.data);

        }
    }
    /**
     * 遍历  type =1: 前  2 中  3 后
     */
    public void traversal(int type){
        switch (type){

        }
    }
}
